package com.xbongbong.saas.domain.dao;

import com.xbongbong.saas.domain.entity.FundAccountEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * 资金账户dao层接口
 * @author zhouwq
 * @date 2019/10/23 14:22
 */
@Repository
@Mapper
public interface FundAccountDao {

    /**
     * 新增资金账户
     * @param entity 新增参数
     * @return 是否成功
     */
    Integer insert(FundAccountEntity entity);

    /**
     * 更新资金账户
     * @param entity 新增参数
     * @return 是否成功
     */
    Integer update(FundAccountEntity entity);

    /**
     * 根据map参数获取集合
     * @param param 入参
     * @return 结果集
     */
    List<FundAccountEntity> findEntitys(@Param("param") Map<String, Object> param);

    /**
     * 根据map参数获取总数
     * @param param 入参
     * @return 总数
     */
    Integer getEntitysCount(@Param("param") Map<String, Object> param);

    /**
     * 根据corpid和id更新金额
     * @param amount 金额
     * @param corpid 公司ID
     * @param id 账户ID
     */
    Integer updateAmountByCorpidAndId(@Param("amount") Double amount, @Param("corpid") String corpid, @Param("id") Long id);

    /**
     * 根据corpid和id批量更新金额
     * @param list 金额ID对应关系
     */
    Integer updateBatchAmountByCorpidAndId(@Param("list") List<FundAccountEntity> list);

    /**
     * 根据corpid和id获取未删除的资金账户
     *
     * @param id 账户ID
     * @param corpid 公司ID
     * @return com.xbongbong.saas.domain.entity.FundAccountEntity
     * @author 徐俊杰
     * @date 2020/3/12 10:44
     * @since v1.0
     */
    FundAccountEntity getByIdCorpid(@Param("id") Long id, @Param("corpid") String corpid);

    /**
     * 根据corpid获取未删除的资金账户
     *
     * @param corpid 公司ID
     * @return java.util.List<java.lang.Long>
     * @author 徐俊杰
     * @date 2020/3/13 14:40
     * @since v1.0
     */
    List<Long> getIdsByCorpid(@Param("corpid") String corpid);

    /**
     * 根据corpid获取未删除的资金账户的余额总值
     *
     * @param corpid 公司ID
     * @return double
     * @author 徐俊杰
     * @date 2020/3/13 14:51
     * @since v1.0
     */
    double sumBalanceByCorpid(@Param("corpid")  String corpid);

    /**
     * 根据corpid获取未删除的资金账户的初始金额总值
     *
     * @param corpid 公司ID
     * @return double
     * @author 徐俊杰
     * @date 2020/3/13 14:51
     * @since v1.0
     */
    double sumInitialAmountByCorpid(@Param("corpid")  String corpid);

    /**
     * 初始化资金账户，默认塞入一个默认账户
     * @param corpidList 公司ID集合
     * @author zhouwq
     * @date 2020/3/24 15:15
     */
    void initFundAccount(@Param("list") List<String> corpidList);
}
